package com.algorithm.study.datastructure.tree.twothree;

/**
 * 所有的算法都是先有API，再有实现，之后是证明，最后是数据。这种先接口后实现、强调测试的做法
 * <p>
 * 2-3树只有2结点没有3结点就是bst。
 * <p>
 * bst-----》2-3树------》红黑树
 * <p>
 * 删除比插入麻烦
 * <p>
 * 模仿二叉搜索树的删除方式：当要被删除的节点有两个儿子时，用该节点的前趋或者后继节点来顶替它，并且将这个前趋或者后继节点删除。
 * <p>
 * https://blog.csdn.net/u013565163/article/details/80820685
 * https://riteme.site/blog/2016-3-12/2-3-tree-and-red-black-tree.html
 * <p>
 * 2-3树2是一种阶为3的B树3，可以简单的理解为3叉树。2-3树最大的特点就是它一定是一棵完全3叉树，
 * 即除了叶节点外，其它的节点没有空儿子。
 * <p>
 * 完全二叉树。完全三叉树。
 * <p>
 * 很多文章，发现都没有讲明白红黑树的原理，只是简单列了红黑树的几条规则，就开始讲解红黑树的插入，
 * 让人一直不知其所以然。也很难深刻的理解红黑树。
 * 最后翻起了《算法》这本书，仔细了解了二叉树查找树、2-3树、红黑树，才明白了红黑树不是平白无故产生的，
 * 而是符合科学的发展观念是循序渐进，站在巨人的肩旁上发展起来的。
 * <p>
 * <p>
 * 注意二叉查找树是向下生长，而2-3树是向上生长。
 * <p>
 * 2-3树包括左子树，中子树，右子树
 * <p>
 * <p>
 * 我们把2-3树中的2节点用黑色表示，3节点用红色表示（3节点的左节点为黑色、右节点为红色）
 * <p>
 * 这也是我们从学生时代的填鸭式的学习方式的转变，不仅仅是只学习结论，并且要了解结论产生的历史及发展。
 * 这样我们才能从搬砖、码农成长为工程师、科学家。
 * <p>
 * bst--------》2-3-------》红黑树
 * 广度-------》di--------》A*
 * 2-3树
 * <p>
 * 2-3树在实际中很少使用。
 * 由于其需要大量的节点变换（从2-节点到3-节点到4-节点甚至到5-节点…），
 * 这些变换在实际代码中是很复杂的。所以现在几乎没有2-3树的具体实现。
 * 但是由于2-3树的变化十分直观，因此前人在2-3树的理论基础上发明了红黑树。
 */
public class TwoThreeTree {
}
